Data Model: CI/CD Pipeline and Living Dashboard
Feature: 005-ci-cd-dashboard Date: 2026-02-15
Overview
This feature primarily deals with CI/CD workflow configuration and static artifact generation. The data model focuses on the JSON structures used for badge data and the workflow configuration schemas.
Entities
1. BadgeData
Represents the JSON file published to GitHub Pages for dynamic badge generation.
File: reports/badge-data.json (published to gh-pages branch)
| Field | Type | Description | Example |
|---|---|---|---|
sprs_score |
integer | Current SPRS compliance score (0-110) | 87 |
sprs_color |
string | Badge color based on score thresholds | "yellow" |
last_assessment |
string | ISO 8601 date of last assessment | "2026-02-15" |
controls_passing |
integer | Number of controls in compliant state | 95 |
controls_total |
integer | Total number of assessed controls | 110 |
generated_at |
string | ISO 8601 timestamp of generation | "2026-02-15T14:30:00Z" |
Color Thresholds:
- sprs_score >= 100 β "green"
- sprs_score >= 80 && sprs_score < 100 β "yellow"
- sprs_score < 80 β "red"
Validation Rules:
- sprs_score: 0 β€ value β€ 110
- sprs_color: enum ["green", "yellow", "red"]
- last_assessment: valid ISO 8601 date
- controls_passing β€ controls_total
2. WorkflowConfig (CI)
GitHub Actions workflow configuration for PR validation.
File: .github/workflows/ci.yml
| Field | Type | Description |
|---|---|---|
name |
string | Workflow display name |
on.pull_request |
object | Trigger on PR events |
on.pull_request.branches |
array | Target branches (main) |
jobs.lint |
object | ansible-lint job definition |
jobs.syntax-check |
object | Playbook syntax check job |
jobs.yaml-validation |
object | YAML lint job |
Job Structure (each job):
- runs-on: ubuntu-latest
- steps: checkout, setup-python, build EE (cached), run make target
3. WorkflowConfig (Deploy)
GitHub Actions workflow configuration for merge-to-main deployment.
File: .github/workflows/deploy.yml
| Field | Type | Description |
|---|---|---|
name |
string | Workflow display name |
on.push.branches |
array | Trigger on push to main |
concurrency.group |
string | Concurrency group name |
concurrency.cancel-in-progress |
boolean | Whether to cancel running |
jobs.build |
object | Build EE and generate artifacts |
jobs.deploy |
object | Deploy to GitHub Pages |
Build Job Outputs:
- Generated documentation in docs/generated/
- Dashboard in reports/dashboard/
- Badge data in reports/badge-data.json
- Crosswalk CSV in docs/generated/crosswalk.csv
4. WorkflowConfig (Nightly)
GitHub Actions workflow configuration for scheduled assessment.
File: .github/workflows/nightly.yml
| Field | Type | Description |
|---|---|---|
name |
string | Workflow display name |
on.schedule |
array | Cron schedule definitions |
on.schedule[0].cron |
string | Cron expression (0 2 * * *) |
on.workflow_dispatch |
object | Manual trigger support |
5. PagesDeployment
Represents the deployed GitHub Pages site structure.
Root: https://<org>.github.io/rcd-cui/
| Path | Content | Source |
|---|---|---|
/ |
Redirect to dashboard | index.html |
/dashboard/ |
Compliance dashboard | reports/dashboard/ |
/docs/ |
Generated documentation | docs/generated/ |
/docs/crosswalk.csv |
Framework crosswalk | docs/generated/crosswalk.csv |
/badge-data.json |
Dynamic badge data | reports/badge-data.json |
6. BranchProtectionConfig
Repository settings for main branch protection (not a file, but configuration).
| Setting | Value | Purpose |
|---|---|---|
required_status_checks.strict |
true |
Branches must be up to date |
required_status_checks.contexts |
["lint", "syntax-check", "yaml-validation"] |
Required CI checks |
required_pull_request_reviews.required_approving_review_count |
1 |
Minimum approvals |
enforce_admins |
true |
No bypass for admins |
allow_force_pushes |
false |
Prevent force push |
allow_deletions |
false |
Prevent branch deletion |
Relationships
βββββββββββββββββββ
β PR Validation βββtriggersβββΆ ci.yml workflow
β (developer) β
βββββββββββββββββββ
β
β merge (requires CI pass + approval)
βΌ
βββββββββββββββββββ
β Main Branch βββtriggersβββΆ deploy.yml workflow
βββββββββββββββββββ β
β² β
β βΌ
β βββββββββββββββββββ
β β Build & Deploy β
β β - make docs β
β β - make dashboardβ
β β - badge-data β
β ββββββββββ¬βββββββββ
β β
β βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Nightly Scheduleβββtriggersββ gh-pages β
β (cron 02:00) β β branch β
βββββββββββββββββββ ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β GitHub Pages β
β Public Site β
βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β shields.io βββreadsβββΆ badge-data.json
β Badges β
βββββββββββββββββββ
State Transitions
Workflow Run States
QUEUED βββΆ IN_PROGRESS βββΆ COMPLETED (success)
ββββΆ FAILED (failure)
ββββΆ CANCELLED (manual/concurrency)
Dashboard Update Cycle
STALE ββ(merge to main)βββΆ BUILDING ββ(success)βββΆ CURRENT
βββ(failure)βββΆ STALE (unchanged)
File Artifacts
| Artifact | Generated By | Published To | Format |
|---|---|---|---|
badge-data.json |
Python script (new) | gh-pages:/badge-data.json |
JSON |
dashboard/index.html |
make dashboard |
gh-pages:/dashboard/ |
HTML |
crosswalk.csv |
make crosswalk |
gh-pages:/docs/crosswalk.csv |
CSV |
pi_guide.md |
make docs |
gh-pages:/docs/pi_guide.md |
Markdown |
researcher_quickstart.md |
make docs |
gh-pages:/docs/ |
Markdown |
sysadmin_reference.md |
make docs |
gh-pages:/docs/ |
Markdown |
ciso_compliance_map.md |
make docs |
gh-pages:/docs/ |
Markdown |
leadership_briefing.md |
make docs |
gh-pages:/docs/ |
Markdown |
glossary_full.md |
make docs |
gh-pages:/docs/ |
Markdown |